#ifndef _UTILS_RINGBUF_H_
#define _UTILS_RINGBUF_H_

#ifdef __cplusplus
extern "C"
{
#endif
#include <stdbool.h>
#include <stdint.h>
    typedef void ringbuf_t;

    /**
     * @brief 仅限用于顺序申请并顺序释放的场景,且最大同时分配的数量8
     *
     * @param nsize 内存池容量
     * @param override 可覆盖已分配的地址, 且无须调用 ringbuf_free
     * @return ringbuf_t* handle
     */
    ringbuf_t *utils_ringbuf_init(uint32_t nsize, bool override);

    /**
     * @brief 销毁
     *
     * @param hdl ringbuf handle
     */
    void utils_ringbuf_destroy(ringbuf_t *hdl);

    /**
     * @brief 从内存池中获取申请空间,申请的空间大小不可大于内存池容量
     *
     * @param hdl ringbuf handle
     * @param nsize 申请的空间大小
     * @return void*
     */
    void *utils_ringbuf_malloc(ringbuf_t *hdl, uint32_t nsize);

    /**
     * @brief 释放已经申请的空间
     *
     * @param hdl ringbuf handle
     * @param buf a from ringbuf's buf
     */
    void utils_ringbuf_free(ringbuf_t *hdl, void *buf);

#ifdef __cplusplus
}
#endif

#endif /*_UTILS_RINGBUF_H_*/
